//自定义指令集
/* 所有的html的防抖  v-dbClick*/
export default {}.install = (Vue, options = {}) => {
  Vue.directive('dbClick', {
    // 只调用一次，指令第一次绑定到元素时调用。在这里可以进行一次性的初始化设置。 
    bind(el, binding, vnode, oldVnode) {
      //console.log("directive>>>>bind");
    },
    // 当被绑定的元素插入到 DOM 中时……
    inserted(el, binding) {
      console.log("directive>>>>inserted");
      console.log(binding);
      let time=binding.hasOwnProperty("value")?binding.value.time:1000;
      el.addEventListener('click', e => {
        console.log("单击");
        if (!el.disabled) {
          console.log("快速双击");
          //添加禁止点击
          addClass(el, "hdisabled");
          el.disabled = true;
          let timer = setTimeout(() => {
            el.disabled = false;
            //移除禁止点击
            removeClass(el, "hdisabled");
          }, time);
        }
      }, true)
    },
    // 所在组件的 VNode 更新时调用，但是可能发生在其子 VNode 更新之前。指令的值可能发生了改变，也可能没有。但是你可以通过比较更新前后的值来忽略不必要的模板更新 (详细的钩子函数参数见下)。
    update(el, binding, vnode, oldVnode) {
      //console.log("directive>>>>update");
    },
    //指令所在组件的 VNode 及其子 VNode 全部更新后调用。
    componentUpdated() {
      //console.log("directive>>>>componentUpdated");
    },
    //只调用一次，指令与元素解绑时调用。
    unbind(el, binding, vnode, oldVnode) {
      //console.log("directive>>>>unbind");
    }
  })
}
function addClass(obj, cls) {
  var obj_class = obj.className;//获取 class 内容.
  var blank = (obj_class != '') ? ' ' : '';//判断获取到的 class 是否为空, 如果不为空在前面加个'空格'.
  var added = obj_class + blank + cls;//组合原来的 class 和需要添加的 class.
  obj.className = added;//替换原来的 class.
}
function removeClass(obj, cls) {
  var obj_class = ' ' + obj.className + ' ';//获取 class 内容, 并在首尾各加一个空格. ex) 'abc    bcd' -> ' abc    bcd '
  obj_class = obj_class.replace(/(\s+)/gi, ' ');//将多余的空字符替换成一个空格. ex) ' abc    bcd ' -> ' abc bcd '
  var removed = obj_class.replace(' ' + cls + ' ', ' ');//在原来的 class 替换掉首尾加了空格的 class. ex) ' abc bcd ' -> 'bcd '
  removed = removed.replace(/(^\s+)|(\s+$)/g, '');//去掉首尾空格. ex) 'bcd ' -> 'bcd'
  obj.className = removed;//替换原来的 class.
}
function hasClass(obj, cls) {
  var obj_class = obj.className;//获取 class 内容.
  obj_class_lst = obj_class.split(/\s+/);//通过split空字符将cls转换成数组.
  x = 0;
  for (x in obj_class_lst) {
    if (obj_class_lst[x] == cls) {//循环数组, 判断是否包含cls
      return true;
    }
  }
  return false;
}